﻿#建议保存编码为：bom头 + utf8
#随机延时，并发写入txt文件。文件输出为bom头+utf16le。

param
(
	[string]$输出文件,
	$输出值
)

#region 用户更改
$随机延时1次数 = 3
$随机延时2次数 = 16
$随机延时3次数 = 8
$随机延时4次数 = 2
#endregion 用户更改

if (Test-Path -LiteralPath $输出文件)
{

}
else
{
	Write-Warning 'bf并发写入txt_v1.1.ps1 -输出文件 "已有的输出文件" -输出值 "xxx" '
	Write-Error '找不到输出文件'
	exit 1
}

$输出文件大小 = (Get-Content -LiteralPath $输出文件).length
if ($输出文件大小 -gt 20mb)
{
	Write-Error '输出文件太大'
	exit 2
}

if ( ($输出值 -eq $null) -or ($输出值 -eq '') )
{
	Write-Warning 'bf并发写入txt_v1.2.ps1 -输出文件 "已有的输出文件" -输出值 "xxx" '
	Write-Error '输出值为空'
	exit 3
}



function 随机延时1
{
	$毫秒1 = 170,170,170,230,230,280,280,310,390,450,560,590
	$延时1 = Get-Random -InputObject $毫秒1
	Write-Verbose "延时 $延时1"
	Start-Sleep -Milliseconds $延时1
}

function 随机延时2
{
	$毫秒2 = 710,710,710,820,820,930,930,1040,1150,1260,1370,1580
	$延时2 = Get-Random -InputObject $毫秒2
	Write-Verbose "延时 $延时2"
	Start-Sleep -Milliseconds $延时2
}

function 随机延时3
{
	$秒3 = 2,2,2,2,3,3,3,4,4,5,6
	$延时3 = Get-Random -InputObject $秒3
	Write-Verbose "延时 $延时3"
	Start-Sleep -seconds $延时3
}

function 随机延时4
{
	$秒4 = 10,12,15,17,19,21
	$延时4 = Get-Random -InputObject $秒4
	Write-Verbose "延时 $延时4"
	Start-Sleep -seconds $延时4
}



function 写入输出txt ($要上锁的文件,$输出值2)
{
	try
	{
		$文件流 = New-Object System.IO.FileStream($要上锁的文件,[System.IO.FileMode]::Open,[System.IO.FileAccess]::Write,[System.IO.FileShare]::Write)  #《-----这句是关键
		$文件流.Position = $文件流.Length #移动光标到文件末尾，以便追加数据。
		$文件 = New-Object System.IO.StreamWriter($文件流,[System.Text.Encoding]::unicode)
		$文件.WriteLine($输出值2)
		#这里不能加Start-Sleep
		$文件.Dispose()
		$文件流.Dispose()
		return $true
		#问：这个脚本谁写的？有问题找谁技术支持？
		#答：QQ群号=183173532
		#名称=powershell交流群
		# 2016-12-20 转载留名
	}
	catch
	{
		Write-Verbose '文件上锁失败，无法写入！'
		return $false
	}
}

function 循环随机写入
{
	for ($i1 = $随机延时1次数; $i1 -gt 0; $i1--)
	{
		if (写入输出txt -要上锁的文件 $输出文件  -输出值2 $输出值 -eq $true)
		{
			Write-Verbose '文件写入成功！'
			exit 0
		}
		随机延时1
	}
}


for ($i2 = $随机延时2次数; $i2 -gt 0; $i2--)
{
	循环随机写入
	随机延时2
}

for ($i3 = $随机延时3次数; $i3 -gt 0; $i3--)
{
	循环随机写入
	随机延时3
}

for ($i4 = $随机延时4次数; $i4 -gt 0; $i4--)
{
	循环随机写入
	随机延时4
}

Write-Error '文件上锁失败，无法写入！'
exit 4

